{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "import xlrd\n",
    "import xlwt\n",
    "import xlwings as xw\n",
    "import xlsxwriter\n",
    "import openpyxl\n",
    "import pandas as pd\n",
    "\n",
    "import datetime"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "# xlwt 只能创建 .xls 文件，不能创建 .xlsx 文件\n",
    "# xlwings可以创建 .xls 和 .xlsx 文件，只需要最后保存时写清楚后缀即可。\n",
    "\n",
    "xls = pd.read_excel(xls_path, sheet_name='Sheet1')\n",
    "xlsx = pd.read_excel(xlsx_path, sheet_name='Sheet1')\n",
    "\n",
    "sheet = xlsx.sheet_by_name(\"Sheet1\")\n",
    "sheet = xlsx.sheet_by_index(0)\n",
    "sheet = xw.sheets.active  # 在活动工作簿\n",
    "sheet = wb.sheets.active  # 在特定工作簿\n",
    "sheet = wb.active\n",
    "\n",
    "xls = xlwt.Workbook(encoding= 'ascii')\n",
    "# 创建新的sheet表\n",
    "worksheet = xls.add_sheet(\"Sheet1\")\n",
    "\n",
    "wb = openpyxl.load_workbook(xlsx_path)\n",
    "\n",
    "\n",
    "worksheet.write_string  (row, col,     item              )\n",
    "worksheet.write_datetime(row, col + 1, date, date_format )\n",
    "worksheet.write_number  (row, col + 2, cost, money_format)\n",
    "\n",
    "style0 = wb.add_format({'bold': 1})\n",
    "style1 = wb.add_format({'align': 'left', 'font_size': 9, 'num_format':'yyyy-mm-dd'})\n",
    "style2 = wb.add_format({'align': 'left', 'font_size': 9})\n",
    "style3 = wb.add_format({'align': 'left', 'text_wrap':1,'bold': 1,'font_size': 9})\n",
    "\n",
    "ItemStyle = workbook.add_format({\n",
    "        'font_size':10,                #字体大小\n",
    "        'bold':1,               #是否粗体\n",
    "        'bg_color':'#101010',          #表格背景颜色\n",
    "        'font_color':'#FEFEFE',        #字体颜色\n",
    "        'align':'center',              #对齐方式，left,center,rigth,top,vcenter,bottom,vjustify\n",
    "        'top':2,                       #上边框，后面参数是线条宽度\n",
    "        'left':2,                      #左边框\n",
    "        'right':2,                     #右边框\n",
    "        'bottom':2                     #底边框\n",
    "'text_wrap':1         #自动换行，可在文本中加 '\\n'来控制换行的位置\n",
    "'num_format':'yyyy-mm-dd'      #设定格式为日期格式，如：2017-07-01\n",
    "})\n",
    "————————————————\n",
    "版权声明：本文为CSDN博主「ddxwltan」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。\n",
    "原文链接：https://blog.csdn.net/ddxwltan/article/details/76509791\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "xlsx_path = 'D:\\\\2022 工作日志.xlsx'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "app = xw.App(visible=True, add_book=True) # 程序可见，只打开不新建工作薄\n",
    "app.display_alerts = False # 警告关闭\n",
    "app.screen_updating = False # 屏幕更新关闭\n",
    "# wb = app.books.open(xls_path)\n",
    "#wb = app.books.open(xlsx_path)\n",
    "wb = app.books.add()\n",
    "\n",
    "wb.save() # 保存文件\n",
    "wb.close() # 关闭文件\n",
    "app.quit() # 关闭程序\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "ename": "FileCreateError",
     "evalue": "[Errno 13] Permission denied: 'D:\\\\2022 工作日志.xlsx'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mPermissionError\u001b[0m                           Traceback (most recent call last)",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\xlsxwriter\\workbook.py\u001b[0m in \u001b[0;36mclose\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    315\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 316\u001b[1;33m                 \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_store_workbook\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    317\u001b[0m             \u001b[1;32mexcept\u001b[0m \u001b[0mIOError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\xlsxwriter\\workbook.py\u001b[0m in \u001b[0;36m_store_workbook\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    631\u001b[0m         \u001b[1;32mexcept\u001b[0m \u001b[0mIOError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 632\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    633\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\xlsxwriter\\workbook.py\u001b[0m in \u001b[0;36m_store_workbook\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    628\u001b[0m         \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 629\u001b[1;33m             xlsx_file = ZipFile(self.filename, \"w\", compression=ZIP_DEFLATED,\n\u001b[0m\u001b[0;32m    630\u001b[0m                                 allowZip64=self.allow_zip64)\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\zipfile.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, file, mode, compression, allowZip64, compresslevel, strict_timestamps)\u001b[0m\n\u001b[0;32m   1249\u001b[0m                 \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1250\u001b[1;33m                     \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mio\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfile\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfilemode\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1251\u001b[0m                 \u001b[1;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mPermissionError\u001b[0m: [Errno 13] Permission denied: 'D:\\\\2022 工作日志.xlsx'",
      "\nDuring handling of the above exception, another exception occurred:\n",
      "\u001b[1;31mFileCreateError\u001b[0m                           Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-16-da5c29265b71>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m     20\u001b[0m \u001b[0mworksheet\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_column\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m15\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     21\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 22\u001b[1;33m \u001b[0mworkbook\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mclose\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     23\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mC:\\ProgramData\\Anaconda3\\lib\\site-packages\\xlsxwriter\\workbook.py\u001b[0m in \u001b[0;36mclose\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    316\u001b[0m                 \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_store_workbook\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    317\u001b[0m             \u001b[1;32mexcept\u001b[0m \u001b[0mIOError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 318\u001b[1;33m                 \u001b[1;32mraise\u001b[0m \u001b[0mFileCreateError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0me\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    319\u001b[0m             \u001b[1;32mexcept\u001b[0m \u001b[0mLargeZipFile\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    320\u001b[0m                 raise FileSizeError(\"Filesize would require ZIP64 extensions. \"\n",
      "\u001b[1;31mFileCreateError\u001b[0m: [Errno 13] Permission denied: 'D:\\\\2022 工作日志.xlsx'"
     ]
    }
   ],
   "source": [
    "workbook = xlsxwriter.Workbook(xlsx_path)\n",
    "\n",
    "worksheet = workbook.add_worksheet('目标管理')\n",
    "worksheet1 = workbook.add_worksheet('第一季度')\n",
    "worksheet2 = workbook.add_worksheet('第二季度')\n",
    "worksheet3 = workbook.add_worksheet('第三季度')\n",
    "worksheet4 = workbook.add_worksheet('第四季度')\n",
    "\n",
    "bold = workbook.add_format({'bold': True})\n",
    "\n",
    "# 为显式钱的单元格添加数字格式。\n",
    "money = workbook.add_format({'num_format': '$#,##0'})\n",
    "\n",
    "# 注意：XlsxWriter只能创建文件，不能读取或修改现有的文件。\n",
    "worksheet.write(0, 0, '序号', bold)\n",
    "worksheet.write(0, 1, '目标', bold)\n",
    "worksheet.write(0, 2, '描述', bold)\n",
    "\n",
    "# 调整列宽。\n",
    "worksheet.set_column(1, 1, 15)\n",
    "    \n",
    "workbook.close()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "start = datetime.date(2022,1,1)\n",
    "end = datetime.date(2022,12,31)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'date' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-6-fe67be8c5c99>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnow\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mdate\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtoday\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m      2\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnow\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m      4\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mnow\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0misoweekday\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mNameError\u001b[0m: name 'date' is not defined"
     ]
    }
   ],
   "source": [
    "now = date.today()\n",
    "print(now)\n",
    "\n",
    "print(now.isoweekday())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(2021, 52, 6)\n",
      "2022-01-01\n",
      "6\n"
     ]
    }
   ],
   "source": [
    "print(d.isocalendar())\n",
    "print(d.isoformat())\n",
    "print(now.isoweekday())\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1, 2, 3, 4}\n"
     ]
    }
   ],
   "source": [
    "quarts = set()\n",
    "for date in pd.date_range(start, end):\n",
    "    quarts.add((date.month - 1) // 3 + 1)\n",
    "print(quarts)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{1, 2, 3, 4, 5, 6, 7}\n"
     ]
    }
   ],
   "source": [
    "weeks=set()\n",
    "for date in pd.date_range(start, end):\n",
    "    weeks.add(date.isoweekday())\n",
    "print(weeks)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "ItemStyle = workbook.add_format({\n",
    "        'font_size':10,                #字体大小\n",
    "        'bold':1,               #是否粗体\n",
    "        'bg_color':'#101010',          #表格背景颜色\n",
    "        'font_color':'#FEFEFE',        #字体颜色\n",
    "        'align':'center',              #对齐方式，left,center,rigth,top,vcenter,bottom,vjustify\n",
    "        'top':2,                       #上边框，后面参数是线条宽度\n",
    "        'left':2,                      #左边框\n",
    "        'right':2,                     #右边框\n",
    "        'bottom':2 ,                    #底边框\n",
    "'text_wrap':1  ,       #自动换行，可在文本中加 '\\n'来控制换行的位置\n",
    "'num_format':'yyyy-mm-dd'      #设定格式为日期格式，如：2017-07-01\n",
    "})\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "success\n"
     ]
    }
   ],
   "source": [
    "workbook = xlsxwriter.Workbook(xlsx_path)\n",
    "\n",
    "worksheet = workbook.add_worksheet('目标管理')\n",
    "\n",
    "bold = workbook.add_format({'bold': True})\n",
    "headtitle = workbook.add_format({\n",
    "    'bold': True, \n",
    "    'align':'center', \n",
    "    'valign':'vcenter', \n",
    "    'bg_color':'#1E90FF',          #表格背景颜色\n",
    "    'font_color':'#FEFEFE',\n",
    "    'border': 1})\n",
    "\n",
    "title = workbook.add_format({\n",
    "    'bold': True, \n",
    "    'align':'center', \n",
    "    'bg_color':'#1F900F',          #表格背景颜色\n",
    "    'font_color':'#FEFEFE',\n",
    "    'border': 1})\n",
    "\n",
    "# 为显式钱的单元格添加数字格式。\n",
    "money = workbook.add_format({'num_format': '$#,##0'})\n",
    "\n",
    "# 注意：XlsxWriter只能创建文件，不能读取或修改现有的文件。\n",
    "worksheet.write(0, 0, '序号', title)\n",
    "worksheet.write(0, 1, '目标', title)\n",
    "worksheet.write(0, 2, '描述', title)\n",
    "#冻结窗口\n",
    "worksheet.freeze_panes(1,1)\n",
    "\n",
    "row, col = 2,1\n",
    "prequart = 0\n",
    "\n",
    "columns = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n",
    "try:\n",
    "    for date in pd.date_range(start, end):\n",
    "        quart = ((date.month - 1) // 3 + 1)\n",
    "        title_date = date.strftime('%Y-%m-%d')\n",
    "        week = date.isoweekday()\n",
    "        # print(week)\n",
    "        col = week * 2 - 1\n",
    "\n",
    "        if prequart != quart:\n",
    "            prequart = quart            \n",
    "            row = 2\n",
    "            worksheet_index = workbook.add_worksheet('第{}季度'.format(quart))\n",
    "            worksheet_index.merge_range(\"B1:C1\", \"Monday\", headtitle)    \n",
    "            worksheet_index.merge_range(\"D1:E1\", 'Tuesday', headtitle)    \n",
    "            worksheet_index.merge_range(\"F1:G1\", 'Wednesday', headtitle)    \n",
    "            worksheet_index.merge_range(\"H1:I1\", 'Thursday', headtitle)    \n",
    "            worksheet_index.merge_range(\"J1:K1\", 'Friday', headtitle)    \n",
    "            worksheet_index.merge_range(\"L1:M1\", 'Saturday', headtitle)\n",
    "            worksheet_index.merge_range(\"N1:O1\", 'Sunday', headtitle)  \n",
    "            worksheet_index.freeze_panes(1,0) # Row\n",
    "            worksheet_index.set_row(0, 20)\n",
    "\n",
    "        # worksheet_index.write(row, col, title_date)\n",
    "\n",
    "        cellname = '{}{}:{}{}'.format(columns[col:col+1],row, columns[col+1:col+2],row)\n",
    "        #print(col,cellname)\n",
    "        worksheet_index.merge_range(cellname, title_date, title)\n",
    "        if week == 7:\n",
    "            worksheet_index.write(row, 0, '总结')\n",
    "            worksheet_index.write(row + 1, 0, '资金完成度')\n",
    "            worksheet_index.write(row + 2, 0, '运动')\n",
    "            worksheet_index.write(row + 3, 0, '上午')\n",
    "            worksheet_index.write(row + 4, 0, '下午')\n",
    "            worksheet_index.write(row + 5, 0, '晚上')\n",
    "            worksheet_index.write(row + 6, 0, '备注')\n",
    "            row = row + 8\n",
    "except Exception as ex:\n",
    "    print('error', ex)\n",
    "        \n",
    "workbook.close()\n",
    "print('success')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def add_title():\n",
    "    worksheet_index = workbook.add_worksheet('第{}季度'.format(quart))\n",
    "    worksheet_index.write(0, 1, 'Monday', title)    \n",
    "    worksheet_index.write(0, 2, 'Tuesday', title)    \n",
    "    worksheet_index.write(0, 3, 'Wednesday', title)    \n",
    "    worksheet_index.write(0, 4, 'Thursday', title)    \n",
    "    worksheet_index.write(0, 5, 'Friday', title)    \n",
    "    worksheet_index.write(0, 6, 'Saturday', title)\n",
    "    worksheet_index.write(0, 7, 'Sunday', title)\n",
    "    worksheet_index.set_column(0, 1, 15)\n",
    "    worksheet_index.set_column(0, 2, 15)\n",
    "    worksheet_index.set_column(0, 3, 15)       \n",
    "    worksheet_index.set_column(0, 4, 15)\n",
    "    worksheet_index.set_column(0, 5, 15)\n",
    "    worksheet_index.set_column(0, 6, 15)\n",
    "    worksheet_index.set_column(0, 7, 15)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "ename": "IndentationError",
     "evalue": "unexpected indent (<ipython-input-12-18ef2d07aa06>, line 2)",
     "output_type": "error",
     "traceback": [
      "\u001b[1;36m  File \u001b[1;32m\"<ipython-input-12-18ef2d07aa06>\"\u001b[1;36m, line \u001b[1;32m2\u001b[0m\n\u001b[1;33m    worksheet_index.merge_range(\"B0:C0\", \"Monday\", title)\u001b[0m\n\u001b[1;37m    ^\u001b[0m\n\u001b[1;31mIndentationError\u001b[0m\u001b[1;31m:\u001b[0m unexpected indent\n"
     ]
    }
   ],
   "source": [
    "worksheet_index = workbook.add_worksheet('第{}季度'.format(quart))\n",
    "        worksheet_index.merge_range(\"B0:C0\", \"Monday\", title)    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "workbook.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
